<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../js/cookie.js"></script>
    <script src="../js/ajax.js"></script>
</head>
<body>
    <script>
        // chain 
        // p.then() 返回值是一个新的 Promise (默认是pedding )
        // 新的pormise 实例对象 的状态是依赖当前的 p的状态  p成功 我就成功  p失败也是失败
      
        // var p  = new Promise(function(resolve,reject){
        //     setTimeout(()=>{
        //         reject(1);
        //     },3000)
        // })
        // console.time("wh2107")
        // p.then(num=>{
        //     console.log("fulfilled --- ", num)
        //     return 2;
        // })
        // .then(num=>{
        //     console.log("fulfilled2 --- ", num)
        //     return 3;
        // })
        // .then(num=>{
        //     console.log("fulfilled3 ---",num);
        // })
        // .catch(err=>{
        //     console.log("err",err)
        //     console.timeEnd("wh2107")
        // })

        // 新的pormise 实例对象 的状态是依赖当前的 p的状态  p成功 我就成功  p失败也是失败
        // 上一个Promise 的实例 为 成功状态 fulfilled 才会去执行 then方法中的成功的回调函数
        // 如果函数出现错误  新的实例状态会马上更新为 已失败 错误信息会被传递 

        // 如果then 函数的 返回值是 非Promise实例(常规的数据) 此时会将新的Promise 实例状态更新为已成功 返回值会作为数据传递到新的实例中
        
        // 上一个Promise 实例 为已失败状态(语法错误+reject) 后续所有等待的实例 依次变为已失败状态 携带的数据也会依次传递
        // 如果在某一个队列的 Promise 捕捉了 异常 已失败   后续会正常执行了  不做理解
        // 链式操作的结果会一个一个向后面传递
        // resolve 成功
        // var p = new Promise(function(resolve,reject){
        //     setTimeout(()=>{
        //         resolve(1)    // 如果执行完毕 就成功  //  p =>  fulfilled 1
        //     },3000)
        // }) 
        // console.log('p',p)
        
        // var p1 = p.then(num=>{
        //     console.log("fulfilled",num);      
        //     // hello;
        //     return 2;     //  p1 =>  fulfilled 2
        // })
        // console.log("p1",p1);

        // var p2 = p1.then(num=>{
        //     console.log("fulfilled",num);
        //     heelo;
        //     return 3;   //  p2 =>  fulfilled 3
        // })
        // console.log("p2",p2);

        // var p3 = p2.then(num=>{
        //     console.log("fulfilled",num);
        //     // return 4;
        //     // return undefined p3=> fulfilled undefined 
        // })
        // console.log("p3",p3);

        // p3.catch(err=>{
        //     console.log("err",err)
        // })

        // reject 已失败
        // setTimeout(3s) ==> reject(1)  =>  p(失败)  => p1(失败) => p2(失败) => p3(失败)
        console.time("wh2107")
        var p = new Promise(function(resolve,reject){
            setTimeout(()=>{
                reject(1)    // 如果执行完毕 就成功  //  p =>  fulfilled 1
            },3000)
        }) 
        console.log('p',p)
        var p1 = p.then(num=>{
            console.log("fulfilled",num);      
            // hello;
            return 2;     //  p1.then  =>  fulfilled 2
        })
        console.log("p1",p1);
        var p2 = p1.then(num=>{
            console.log("fulfilled",num);
            return 3;   //  p2 =>  fulfilled 3
        })
        console.log("p2",p2);

        var p3 = p2.then(num=>{
            console.log("fulfilled",num);
            // return 4;
            // return undefined p3=> fulfilled undefined 
        })
        console.log("p3",p3);

        p3.catch(err=>{
            console.log("err",err)
            console.timeEnd("wh2107") 
        })
    </script>
</body>
</html>